声明 模块 "dgram" {

    //@@{ 地址信息_:AddressInfo }
    导入 { 地址信息_ } 来自 "net";
    导入 * 转为 dns 来自 "dns";

    //@@{ 事件组:events }
    导入 * 转为 事件组 来自 "events";

    //@@{ 远程信息_:RemoteInfo }
    接口 远程信息_ {

        //@@{ 地址:address }
        地址: 文字;

        //@@{ 家族:family }
        家族: 'IPv4' | 'IPv6';

        //@@{ 端口:port }
        端口: 数字;

        //@@{ 大小:size }
        大小: 数字;
    }

    //@@{ 绑定选项_:BindOptions }
    接口 绑定选项_ {

        //@@{ 端口:port }
        端口: 数字;

        //@@{ 地址:address }
        地址?: 文字;

        //@@{ 相同描述符:exclusive }
        相同描述符?: 真假;
    }

    //@@{ 套接字类型_:SocketType }
    类型 套接字类型_ = "udp4" | "udp6";

    //@@{ 套接字选项_:SocketOptions }
    接口 套接字选项_ {

        //@@{ 类型:type, 套接字类型_:SocketType }
        类型: 套接字类型_;

        //@@{ 重用地址:reuseAddr }
        重用地址?: 真假;
        /**
         * @default false
         */

        //@@{ Ipv6仅:ipv6Only }
        Ipv6仅?: 真假;

        //@@{ 接收缓冲区大小:recvBufferSize }
        接收缓冲区大小?: 数字;

        //@@{ 发送缓冲区大小:sendBufferSize }
        发送缓冲区大小?: 数字;

        //@@{ 查找:lookup, 查找一个选项_:LookupOneOptions, 错误异常_:ErrnoException }
        查找?: (主机名: 文字, 选项组: dns.查找一个选项_, 回调: (错: NodeJS.错误异常_ | 空值, 地址: 文字, 家族: 数字) => 无值) => 无值;
    }

    //@@{ 创建套接字:createSocket, 套接字类型_:SocketType, 缓冲区_:Buffer, 远程信息_:RemoteInfo }
    //@@{ 套接字_:Socket }
    函数 创建套接字(类型: 套接字类型_, 回调?: (消息: 缓冲区_, 远程信息: 远程信息_) => 无值): 套接字_;

    //@@{ 创建套接字:createSocket, 套接字选项_:SocketOptions, 缓冲区_:Buffer, 远程信息_:RemoteInfo }
    //@@{ 套接字_:Socket }
    函数 创建套接字(选项组: 套接字选项_, 回调?: (消息: 缓冲区_, 远程信息: 远程信息_) => 无值): 套接字_;

    //@@{ 套接字_:Socket, 事件组:events, 事件发生器_:EventEmitter }
    类别 套接字_ 扩展 事件组.事件发生器_ {

        //@@{ 发送:send, 缓冲区_:Buffer, 正整数数组8_:Uint8Array, 错误_:Error }
        发送(消息: 缓冲区_ | 文字 | 正整数数组8_ | 任意[], 端口: 数字, 地址?: 文字, 回调?: (错误: 错误_ | 空值, 字节组: 数字) => 无值): 无值;

        //@@{ 发送:send, 缓冲区_:Buffer, 正整数数组8_:Uint8Array, 错误_:Error }
        发送(消息: 缓冲区_ | 文字 | 正整数数组8_, 偏移: 数字, 长度: 数字, 端口: 数字, 地址?: 文字, 回调?: (错误: 错误_ | 空值, 字节组: 数字) => 无值): 无值;

        //@@{ 绑定:bind }
        绑定(端口?: 数字, 地址?: 文字, 回调?: () => 无值): 无值;

        //@@{ 绑定:bind }
        绑定(端口?: 数字, 回调?: () => 无值): 无值;

        //@@{ 绑定:bind }
        绑定(回调?: () => 无值): 无值;

        //@@{ 绑定:bind, 绑定选项_:BindOptions }
        绑定(选项组: 绑定选项_, 回调?: () => 无值): 无值;

        //@@{ 关闭:close }
        关闭(回调?: () => 无值): 无值;

        //@@{ 地址:address, 地址信息_:AddressInfo }
        地址(): 地址信息_ | 文字;

        //@@{ 设置广播:setBroadcast }
        设置广播(标志: 真假): 无值;

        //@@{ 设置存活时间:setTTL }
        设置存活时间(存活时间: 数字): 无值;

        //@@{ 设置多播存活时间:setMulticastTTL }
        设置多播存活时间(存活时间: 数字): 无值;

        //@@{ 设置多播接口:setMulticastInterface }
        设置多播接口(多播接口: 文字): 无值;

        //@@{ 设置多播回送:setMulticastLoopback }
        设置多播回送(标志: 真假): 无值;

        //@@{ 添加成员:addMembership }
        添加成员(多播地址: 文字, 多播接口?: 文字): 无值;

        //@@{ 删除多播地址:dropMembership }
        删除多播地址(多播地址: 文字, 多播接口?: 文字): 无值;

        //@@{ 限制退出:ref }
        限制退出(): 本体;

        //@@{ 解除限制:unref }
        解除限制(): 本体;

        //@@{ 设置接收缓冲区大小:setRecvBufferSize }
        设置接收缓冲区大小(大小: 数字): 无值;

        //@@{ 设置发送缓冲区大小:setSendBufferSize }
        设置发送缓冲区大小(大小: 数字): 无值;

        //@@{ 获取接收缓冲区大小:getRecvBufferSize }
        获取接收缓冲区大小(): 数字;

        //@@{ 获取发送缓冲区大小:getSendBufferSize }
        获取发送缓冲区大小(): 数字;

        /**
         * events.EventEmitter
         * 1. close
         * 2. error
         * 3. listening
         * 4. message
         */

        //@@{ 添加监听器:addListener }
        添加监听器(事件: 文字, 监听器: (...参数组: 任意[]) => 无值): 本体;

        //@@{ 添加监听器:addListener, "关闭":"close" }
        添加监听器(事件: "关闭", 监听器: () => 无值): 本体;

        //@@{ 添加监听器:addListener, "错误":"error", 错误_:Error }
        添加监听器(事件: "错误", 监听器: (错: 错误_) => 无值): 本体;

        //@@{ 添加监听器:addListener, "监听":"listening" }
        添加监听器(事件: "监听", 监听器: () => 无值): 本体;

        //@@{ 添加监听器:addListener, "消息":"message", 缓冲区_:Buffer, 远程信息_:RemoteInfo }
        添加监听器(事件: "消息", 监听器: (消息: 缓冲区_, 远程信息: 远程信息_) => 无值): 本体;

        //@@{ 发出:emit }
        发出(事件: 文字 | 符号, ...参数组: 任意[]): 真假;

        //@@{ 发出:emit, "关闭":"close" }
        发出(事件: "关闭"): 真假;

        //@@{ 发出:emit, "错误":"error", 错误_:Error }
        发出(事件: "错误", 错: 错误_): 真假;

        //@@{ 发出:emit, "监听":"listening" }
        发出(事件: "监听"): 真假;

        //@@{ 发出:emit, "消息":"message", 缓冲区_:Buffer, 远程信息_:RemoteInfo }
        发出(事件: "消息", 消息: 缓冲区_, 远程信息: 远程信息_): 真假;

        //@@{ 正在:on }
        正在(事件: 文字, 监听器: (...参数组: 任意[]) => 无值): 本体;

        //@@{ 正在:on, "关闭":"close" }
        正在(事件: "关闭", 监听器: () => 无值): 本体;

        //@@{ 正在:on, "错误":"error", 错误_:Error }
        正在(事件: "错误", 监听器: (错: 错误_) => 无值): 本体;

        //@@{ 正在:on, "监听":"listening" }
        正在(事件: "监听", 监听器: () => 无值): 本体;

        //@@{ 正在:on, "消息":"message", 缓冲区_:Buffer, 远程信息_:RemoteInfo }
        正在(事件: "消息", 监听器: (消息: 缓冲区_, 远程信息: 远程信息_) => 无值): 本体;

        //@@{ 一次:once }
        一次(事件: 文字, 监听器: (...参数组: 任意[]) => 无值): 本体;

        //@@{ 一次:once, "关闭":"close" }
        一次(事件: "关闭", 监听器: () => 无值): 本体;

        //@@{ 一次:once, "错误":"error", 错误_:Error }
        一次(事件: "错误", 监听器: (错: 错误_) => 无值): 本体;

        //@@{ 一次:once, "监听":"listening" }
        一次(事件: "监听", 监听器: () => 无值): 本体;

        //@@{ 一次:once, "消息":"message", 缓冲区_:Buffer, 远程信息_:RemoteInfo }
        一次(事件: "消息", 监听器: (消息: 缓冲区_, 远程信息: 远程信息_) => 无值): 本体;

        //@@{ 预处理监听器:prependListener }
        预处理监听器(事件: 文字, 监听器: (...参数组: 任意[]) => 无值): 本体;

        //@@{ 预处理监听器:prependListener, "关闭":"close" }
        预处理监听器(事件: "关闭", 监听器: () => 无值): 本体;

        //@@{ 预处理监听器:prependListener, "错误":"error", 错误_:Error }
        预处理监听器(事件: "错误", 监听器: (错: 错误_) => 无值): 本体;

        //@@{ 预处理监听器:prependListener, "监听":"listening" }
        预处理监听器(事件: "监听", 监听器: () => 无值): 本体;

        //@@{ 预处理监听器:prependListener, "消息":"message", 缓冲区_:Buffer, 远程信息_:RemoteInfo }
        预处理监听器(事件: "消息", 监听器: (消息: 缓冲区_, 远程信息: 远程信息_) => 无值): 本体;

        //@@{ 预处理一次监听器:prependOnceListener }
        预处理一次监听器(事件: 文字, 监听器: (...参数组: 任意[]) => 无值): 本体;

        //@@{ 预处理一次监听器:prependOnceListener, "关闭":"close" }
        预处理一次监听器(事件: "关闭", 监听器: () => 无值): 本体;

        //@@{ 预处理一次监听器:prependOnceListener, "错误":"error", 错误_:Error }
        预处理一次监听器(事件: "错误", 监听器: (错: 错误_) => 无值): 本体;

        //@@{ 预处理一次监听器:prependOnceListener, "监听":"listening" }
        预处理一次监听器(事件: "监听", 监听器: () => 无值): 本体;

        //@@{ 预处理一次监听器:prependOnceListener, "消息":"message", 缓冲区_:Buffer, 远程信息_:RemoteInfo }
        预处理一次监听器(事件: "消息", 监听器: (消息: 缓冲区_, 远程信息: 远程信息_) => 无值): 本体;
    }
}
